###############################################################################
# SuperLinks                                                                  #
# Copyright (c) 2000-2007 Greg Nolle (http://greg.nolle.co.uk)                #
###############################################################################
# This program is free software; you can redistribute it and/or modify it     #
# under the terms of the GNU General Public License as published by the Free  #
# Software Foundation; either version 2 of the License, or (at your option)   #
# any later version.                                                          #
#                                                                             #
# This program is distributed in the hope that it will be useful, but WITHOUT #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       #
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for   #
# more details.                                                               ##                                                                             #
# You should have received a copy of the GNU General Public License along     #
# with this program; if not, write to the Free Software Foundation, Inc.,     #
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.                 #
###############################################################################
# ControlPanel/ModifyLanguage.pm.pl -> ModifyLanguage module                  #
###############################################################################
# DON'T EDIT BELOW UNLESS YOU KNOW WHAT YOU'RE DOING!                         #
###############################################################################
package CP::ModifyLanguage;

BEGIN { require "System.pm.pl"; import System qw($SYSTEM); }
BEGIN { require "General.pm.pl"; import General qw($GENERAL); }
require "Error.pm.pl";
require "Standard.pm.pl";
require "Authenticate.pm.pl";
require "Variables.pm.pl";

use strict;

require "ControlPanel/Output/ModifyLanguage.pm.pl";

sub new {
  my ($class) = @_;
  my $self    = {};
  return bless($self, $class);
}

sub DESTROY { }

###############################################################################
# show subroutine
sub show {
  my $self = shift;
  my %in = (DB => undef, @_);

  #----------------------------------------------------------------------#
  # Authenticating...                                                    #

  &Authenticate::CP(DB => $in{'DB'}, ACTION => "LANGUAGESETS_MODIFY");

  #----------------------------------------------------------------------#
  # Checking fields...                                                   #

  if (!$SL::QUERY{'LID'}) {
    &Error::Error("CP", MESSAGE => "You didn't specify a LanguageSet ID (LID)");
  }
  
  my $LanguageSet = $in{'DB'}->BinarySelect(
    TABLE => "LanguageSets",
    KEY   => $SL::QUERY{'LID'}
  );
  unless ($LanguageSet) {
    &Error::Error("CP", MESSAGE => "The LanguageSet ID (LID) you specified is invalid");
  }

  if (!$SL::QUERY{'Language'}) {
    &Error::Error("CP", MESSAGE => "You didn't specify a Language File");
  }
  unless (-e "$SL::PATH/Private/Skins/Language/$SL::QUERY{'LID'}/$SL::QUERY{'Language'}") {
    &Error::Error("CP", MESSAGE => "The Language File you specified is invalid");
  }

  #----------------------------------------------------------------------#
  # Getting data...                                                      #
  
  require "Skins/Language/$SL::QUERY{'LID'}/$SL::QUERY{'Language'}";
  
  my $Language = $SL::QUERY{'Language'};
     $Language =~ s/\.pm\.pl$//;
     $Language = eval("return \$Language::".$Language."::LANGUAGE;");

  my %INPUT;

  $INPUT{'LANGUAGE'}    = $Language;
  $INPUT{'LANGUAGESET'} = $LanguageSet;

  #----------------------------------------------------------------------#
  # Printing page...                                                     #

  my $Skin = Skin::CP::ModifyLanguage->new();

  &Standard::PrintHTMLHeader();
  print $Skin->show(input => \%INPUT);
  
  return 1;
}

###############################################################################
# do subroutine
sub do {
  my $self = shift;
  my %in = (DB => undef, @_);

  #----------------------------------------------------------------------#
  # Authenticating...                                                    #

  &Authenticate::CP(DB => $in{'DB'}, ACTION => "LANGUAGESETS_MODIFY");

  #----------------------------------------------------------------------#
  # Checking fields...                                                   #

  if (!$SL::QUERY{'LID'}) {
    &Error::Error("CP", MESSAGE => "You didn't specify a LanguageSet ID (LID)");
  }
  
  my $LanguageSet = $in{'DB'}->BinarySelect(
    TABLE => "LanguageSets",
    KEY   => $SL::QUERY{'LID'}
  );
  unless ($LanguageSet) {
    &Error::Error("CP", MESSAGE => "The LanguageSet ID (LID) you specified is invalid");
  }

  if (!$SL::QUERY{'Language'}) {
    &Error::Error("CP", MESSAGE => "You didn't specify a Language File");
  }
  unless (-e "$SL::PATH/Private/Skins/Language/$SL::QUERY{'LID'}/$SL::QUERY{'Language'}") {
    &Error::Error("CP", MESSAGE => "The Language File you specified is invalid");
  }

  #----------------------------------------------------------------------#
  # Updating data...                                                     #

  require "Skins/Language/$SL::QUERY{'LID'}/$SL::QUERY{'Language'}";
  
  my $Language = $SL::QUERY{'Language'};
     $Language =~ s/\.pm\.pl$//;
     $Language = eval("return \$Language::".$Language."::LANGUAGE;");

  my %RECORD;

  foreach my $key (keys %{ $Language }) {
    if (ref($Language->{$key}) eq "HASH") {
      foreach my $key2 (keys %{ $Language->{$key} }) {
        $RECORD{$key}->{$key2} = $SL::QUERY{'FORM_'.$key.'-'.$key2};
      }
    } else {
      $RECORD{$key} = $SL::QUERY{'FORM_'.$key};
    }
  }
  
  my $Variables = Variables->new();
     $Variables->Update(
       FILE   => "$SL::PATH/Private/Skins/Language/$SL::QUERY{'LID'}/$SL::QUERY{'Language'}",
       VALUES => \%RECORD
     ) || &Error::Error("CP", MESSAGE => "Error updating language file. $Variables->{'ERROR'}");
  
  my %INPUT;

  $INPUT{'RECORD'}      = \%RECORD;
  $INPUT{'LANGUAGESET'} = $LanguageSet;

  #----------------------------------------------------------------------#
  # Printing page...                                                     #

  my $Skin = Skin::CP::ModifyLanguage->new();

  &Standard::PrintHTMLHeader();
  print $Skin->do(input => \%INPUT);
  
  return 1;
}

1;